#ifndef AssociationSet_H_
#define AssociationSet_H_
#include <vector>
#include "KeyPoint.h"
#include "Plane.h"
#include "Association.h"
#include "PlaneAssociation.h"
#include "KeyPointAssociation.h"

using namespace std;
class AssociationSet
{
	public:
		int len;
		double bestcase;
		char * hash;
		double val;
		vector<Association *> * selected_associations;
		vector<Association *> * possible_associations;
		
		//vector< vector< Association * > * > *
		
		AssociationSet();
		~AssociationSet();
		
		AssociationSet * clone();
		vector<AssociationSet * > * explore();
		bool testAssociation(Association * t);
		bool select_association(int index);
		
		void add(Association * a);
		int mergeable(AssociationSet * set);
		AssociationSet * merge(AssociationSet * a);
		float ** jc();
		
		char * getHashValue();
		double estimateSearchValue();
		void update_possible();
		float best_p();
};
#endif
